home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 5 / QRZ Ham Radio Callsign Database - Volume 5.iso / files / amiga / csrc720j.lzh / timer.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-11  |  1.6 KB  |  67 lines

  1. /* timer.c */
  2. #include <exec/types.h>
  3. #include <exec/lists.h>
  4. #include <exec/nodes.h>
  5. #include <exec/ports.h>
  6. #include <exec/io.h>
  7. #include <exec/devices.h>
  8. #include <devices/timer.h>
  9.  
  10. extern short debug;
  11. struct Device *TimerBase;
  12. struct timeRequest {
  13.    struct IORequest tr_node;
  14.    struct timeval tr_time;
  15. };
  16. struct MsgPort *timerport;
  17. struct timeRequest timermsg;
  18. long timerbit;
  19. inittimer()
  20. {
  21.    short error;
  22.    timerport = CreatePort((UBYTE *)"timer.port",0L);
  23.    if(timerport == NULL) {
  24.       printf("cannot createport timer\n");
  25.       return(1);
  26.    }
  27.    error = OpenDevice((UBYTE *)TIMERNAME,UNIT_VBLANK,
  28.                                       (struct IORequest *)&timermsg,0L);
  29.    if(error) {
  30.       DeletePort(timerport);
  31.       printf("can't open timer device\n");
  32.       return(1);
  33.    }
  34.    timermsg.tr_node.io_Message.mn_ReplyPort = timerport;
  35.    timermsg.tr_node.io_Command = TR_ADDREQUEST;
  36.    timermsg.tr_node.io_Flags = 0;
  37.    timermsg.tr_node.io_Error = 0;
  38.    TimerBase = timermsg.tr_node.io_Device;
  39.    timerbit = 1L << timerport->mp_SigBit;
  40.    return(0);
  41. }
  42.  
  43. endtimer()
  44. {
  45.    CloseDevice((struct IORequest *)&timermsg);
  46.    DeletePort(timerport);
  47. }
  48. struct timeval tval;
  49. settimer(secs)
  50. short secs;
  51. {
  52.    if(secs <= 0)secs = 1;
  53.    timermsg.tr_time.tv_secs = secs;
  54.    timermsg.tr_time.tv_micro = 0L;
  55.    timermsg.tr_node.io_Command = TR_ADDREQUEST;
  56.    SendIO((struct IORequest *)&timermsg);
  57. }
  58.  
  59. cantimer()
  60. {
  61.    AbortIO((struct IORequest *)&timermsg);
  62.    Wait(timerbit);
  63.    WaitIO((struct IORequest *)&timermsg);
  64. }
  65. /* This version works. The main Wait loop must have a WaitIO((struct IORequest *)&timermsg)
  66. */
  67.